#include <malloc.h>
#include <time.h>
#include<stdio.h>
#include<stdlib.h>

/**** petite macro pour choisir le type des matrices et vecteurs (entiers, reels) ******/
// gcc -DTYPE_INT
#ifdef INT
typedef int T;
#else
#ifdef FLOAT
typedef float T;
#else
 #error "Need to give MACRO definition for element type : -DINT or -DFLOAT"
#endif
#endif
/***************************************************************************************/


#include "fonctions.c"



/*********** programme principal********************************/ 

int main(int argc, char *argv[])
{


	//declarations parametres
	// on precisera la taille des matrices en ligne de commande
	int dim=atoi(argv[1]);
	int f_compteur=atoi(argv[2]);
	int i,j;
	
	int valeurmax,valeurmin;
	
	T* u;
	T* v;
	 
	//pour le stockage CSR des matrices creuses
	int *IA; //stocke le nombre d'elements non nuls par ligne
	int *J; //stocke les numéros de colonnes des elements non nuls
 	T* Values; //tableau de valeurs non nuls de la matrice

	//Allocation dynamique vecteur IA et J equivalent a une diagonale (coeff aléatoires)
	IA=(int*)malloc((dim+1)*sizeof(int));
	J=(int*)malloc(dim*sizeof(int));
	Values=(T*)malloc(dim*sizeof(T));
	v=(T*)malloc(dim*sizeof(T));
	u=(T*)malloc(dim*sizeof(T));
	
	
	valeurmax=100000;
	valeurmin=-100000;
	IA[dim]=1;
	for(i=0;i<dim;i++)
	{
		IA[i]=1;
		J[i]=i; 
		Values[i]=(T)rand()*(valeurmax-valeurmin)+valeurmin;
		u[i]=(T)1;
	}   

	//appel fonction produit
	SPMV_CSR(IA,J,Values,u,v,dim,f_compteur);

	/**************liberation memoire***********************************************/
	//liberation en memoire de IA,J,Values,u et v

	free(IA);
	free(Values);
	free(u);
	free(v);
	free(J);
/****************************************************************************/

return 0;
}

